D3 颜色与插值
颜色
RGB
RGB 色彩模式 (RGB color mode),是一种工业界的颜色标准,主要有红(R,Red)、绿(G,Green)、蓝(B,Blue)三色,即RGB,通过相互之间的叠加来取得各种各样的颜色。RGB 主要覆盖了目前所有常用和人类肉眼可用的颜色,也是最为常用的颜色模式之一。
除此之外,RGB 的亮度各有 0~255个亮度,通过他们三个通道的叠加可以组合出大约1678万中颜色,通常也会被称之为1600万色或千万色,还可以被称之为24位色,在D3中他有如下方法:
| ID | DA | FA |
|---|---|---|
| d3.rgb(r,g,b) | 分别输出 r\g\b来创建颜色(范围都是0,255) |
|
d3.rgb(color) |
通过输出相应的字符串来创建颜色: | |
RGB 十进制 |
rgb(255, 255, 255) | |
RGB 十六进制 |
#ff0d0d | |
RGB 十六进制缩写 |
#ff0 | |
HSL 十进制 |
hsl(120, 0.5, 0.5) | |
颜色名称 |
red | |
| rgb.brighter() | 使得颜色变得更加明亮 | RGB的各个通道 x 0.7 ^ -k(如果 k没有,那么k的值就为1),需要注意的是只有当某通道的值的范围在 30~255 之间时,才会进行相应的计算 |
| rgb.darker() | 颜色变得更加黯淡 | RGB各个值 x 0.7 ^ k |
| rgb.hsl() | 返回该颜色对应的 HSL值 |
|
| rgb.toString() | 以字符串的形式返回颜色值 #ffffff |
|
brighter() |
darker() |
返回一个新的颜色对象,当前对象并不会进行改变 |
| hsl() | 返回当前颜色所对应的 HSL值 |
方法

1 | var color = d3.rgb(166,12,12); |
在上述的 code中,我们可以通过使用has()来返回 color的has颜色值,也可以通过使用toString()来返回该颜色的十六进制,darker()与brighter()数值为2即亮度为2,暗度为2的颜色变值。
HSL

HSL 与 RGB 的区别就是,他是通过将 RGB 色彩模式内的各个组成颜色放在圆柱坐标系的表示方法。这种表示方法会比基于笛卡尔坐标系的集合结构中的RGB更加直观。
HSL 颜色空间主要通过色相(H,Hue)、饱和度(S,Saturation)、亮度(L,Lightness)三个相互叠加来得到各种颜色,他的色相范围是0°~360°,饱和度和亮度分别为0~1。其中色相°是一个角度,每个角度都可以代表其中的一个颜色,例如0°代表红色,120°代表绿色,240°代表蓝色。
通常的情况下,饱和度越大,颜色就越鲜艳,而亮度值主要控制色彩的明暗变化,当亮度越大,就越接近与白色,反之值越小就越接近黑色,默认的情况下RGB与HSL的颜色是可以互相转换的。
方法
| ID | DA |
|---|---|
d3.hsl(h,s,l) |
根据h、s、l值来创建HAL颜色 |
d3.hsl(color) |
根据字符串来创建HSL颜色 |
| hsl.brighter() | 使得颜色变得更亮 |
| hsl.darker() | 使得颜色变得更暗 |
| hsl.rgb() | 返回对应的rgb颜色 |
| hsl.toString | 返回以RGB字符串十六进制形式输出的颜色 |

1 | var rgb = d3.rgb(166,12,12) |
插值

插值(Interpolation)主要用于计算介于两个颜色之间的颜色,主要可以通过使用d3.interpolateRgb()来处理RGB颜色之间的插值运算。而如果是HSL颜色则可以通过使用d3.interpolateHsl()来处理HSL颜色之间的插值运算。除此之外,D3 还提供了一种更加智能的方法即:d3.interpolate(),他会自动的判断颜色类型,还可以处理字符串之间的差值。
1 | var ragOne = d3.rgb(255,0,0) |
在上述的 code 中,ragOne与ragTwo的插值通过interpolate来自动判断颜色类型,并根据设置的插值进行计算,当插值为0时返回了#ff0000颜色,而当插值为0.5时,则返回了#808080颜色。
